import java.util.ArrayList;

public class Exercise extends ArrayList<BinaryOperation> {
    // 默认构造方法
    public Exercise() {
        super();
    }
    
    // 检查习题集中是否包含指定的算式
    public boolean contains(BinaryOperation operation) {
        for (BinaryOperation op : this) {
            if (op.equals(operation)) {
                return true;
            }
        }
        return false;
    }
    
    // 生成指定数量的加法习题（确保无重复）
    public void generateAdditionExercise(int count) {
        this.clear(); // 清空现有习题
        
        int generatedCount = 0;
        while (generatedCount < count) {
            BinaryOperation newOp = BinaryOperation.generateAdditionOperation();
            // 检查是否已存在，如果不存在则添加
            if (!contains(newOp)) {
                this.add(newOp);
                generatedCount++;
            }
        }
    }
    
    // 生成指定数量的减法习题（确保无重复）
    public void generateSubtractExercise(int count) {
        this.clear(); // 清空现有习题
        
        int generatedCount = 0;
        while (generatedCount < count) {
            BinaryOperation newOp = BinaryOperation.generateSubtractOperation();
            // 检查是否已存在，如果不存在则添加
            if (!contains(newOp)) {
                this.add(newOp);
                generatedCount++;
            }
        }
    }
    
    // 生成指定数量的混合习题（加法和减法各占一半，确保无重复）
    public void generateBinaryExercise(int count) {
        this.clear(); // 清空现有习题
        
        int additionCount = count / 2;
        int subtractCount = count - additionCount;
        
        // 先生成加法习题
        int generatedAddition = 0;
        while (generatedAddition < additionCount) {
            BinaryOperation newOp = BinaryOperation.generateAdditionOperation();
            if (!contains(newOp)) {
                this.add(newOp);
                generatedAddition++;
            }
        }
        
        // 再生成减法习题
        int generatedSubtract = 0;
        while (generatedSubtract < subtractCount) {
            BinaryOperation newOp = BinaryOperation.generateSubtractOperation();
            if (!contains(newOp)) {
                this.add(newOp);
                generatedSubtract++;
            }
        }
    }
    
    // 默认格式化显示（5列）
    public void formatAndDisplay() {
        formatAndDisplay(5);
    }
    
    // 指定列数的格式化显示
    public void formatAndDisplay(int columns) {
        System.out.println("\n格式化显示习题（" + columns + "列）：");
        
        for (int i = 0; i < this.size(); i++) {
            // 打印序号和算式，格式化输出
            System.out.print((i + 1) + ". " + this.get(i));
            
            // 控制换行，每columns个算式换一行
            if ((i + 1) % columns == 0) {
                System.out.println();
            } else if (i < this.size() - 1) {
                System.out.print("\t");
            }
        }
        
        // 如果最后一行不是完整的columns个算式，添加换行
        if (this.size() % columns != 0) {
            System.out.println();
        }
    }
}